package cashpointer.mobile.model;

import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.graphics.Color;
import android.net.Uri;
import android.view.View;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TextView;
import cashpointer.mobile.dao.DaoModel.Owners;
import cashpointer.mobile.support.NotificationSupportManager;

public class ExtendedCheckBoxListView extends LinearLayout {
    private TextView text;
    private CheckBox checkBox;
    private ExtendedCheckBox extendedCheckBox;
    private Context context;
    
    public ExtendedCheckBoxListView(Context context, ExtendedCheckBox aExtendedCheckBox) {
         super(context);
         this.context = context;
         extendedCheckBox = aExtendedCheckBox;
         
         // Ustawienie orietacji horyzontalnej (poziomej)
         this.setOrientation(HORIZONTAL);
         
         // Zbudowanie checkbox'a i ustawienie na nim parametrow
         checkBox = new CheckBox(context);
         checkBox.setPadding(0, 0, 20, 0);
         checkBox.setChecked(extendedCheckBox.getChecked());
         
         // Ustawienie uchwytu klikniecia dla checkbox'a
         checkBox.setOnClickListener(new OnClickListener() {
        	 // Zmiana stanu zmiennej
        	 public void onClick(View v) {
        		 // Uwzglednienie zmiany w obiekcie "wewnetrznym"
        		 extendedCheckBox.setChecked(getCheckBoxState());
        		 
        		 // Zapisanie zmiany w bazie danych
        		 saveCheckBoxStatus(extendedCheckBox);
        	 }
         });        
         
         // Dodanie cheackbox'a do widoku
         addView(checkBox, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
         
         
         // Zbudowanie text'u i ustawienie na nim parametrow
         text = new TextView(context);
         text.setText(extendedCheckBox.getText());
         text.setTextSize(18);
         text.setTextColor(Color.parseColor("#ffffff"));
         
         // Usuniecie akcji na text'cie w celach ochronnych przed dziwnym zachowaniem
         text.setClickable(false);
         text.setFocusable(false);
         text.setFocusableInTouchMode(false);

         // Dodanie text'u do widoku
         addView(text, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
         
         // Obsluga zdarzenia klikniecia na widoku
         setOnClickListener(new OnClickListener() {
        	 // Zaznacz, badz odznacz cheackbox
        	 public void onClick(View v) {
        		 toggleCheckBox();
        	 }
         });
    }
   
    public void toggleCheckBox() {
		 boolean newState = !getCheckBoxState();
		 
		 // Zmiana statusu checkbox'a
		 checkBox.setChecked(newState);
		 
		 // Uwzglednienie zmiany w obiekcie "wewnetrznym"
		 extendedCheckBox.setChecked(newState);   	
		
		 // Zapisanie zmiany w bazie danych
		 saveCheckBoxStatus(extendedCheckBox);
    }
    
    /**
     * Pobranie
     */
    public boolean getCheckBoxState() {
    	return checkBox.isChecked();
    }

    /**
     * Zapisanie w bazie danych zmian
     * @param extendedCheckBox
     */
	private void saveCheckBoxStatus(ExtendedCheckBox extendedCheckBox) {
		// Adres do wybranego rekordu z bazy (o danym id)
        Uri uri = ContentUris.withAppendedId(Owners.CONTENT_URI, extendedCheckBox.getId());
		
		// Zakres zmian do wprowadzenia
		ContentValues values = new ContentValues();
        values.put(Owners.SELECTED, extendedCheckBox.getChecked());
        
        // Aktualizacja
        context.getContentResolver().update(uri, values, null, null);
        
        // Komunikat
		NotificationSupportManager.showToastNotification(context, "Zapisano zmiane");
    }
}
